package com.tom.joke;

// 2. 双检锁/双重校验锁（DCL，即 double-checked locking）（目前最常用的）
public class Singleton {
    // 1.保证“内存可见性”
    // 2.防止”指令重排序“
    private volatile static Singleton singleton;
    private Singleton (){}
    public static Singleton getSingleton() {
        if (singleton == null) { // 第一层
            synchronized (Singleton.class) { // 加锁
                if (singleton == null) { // 第二层
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}






